<?php

declare(strict_types=1);

/**
 * Holiya 命令行工具
 *
 * @package Shenlink\Holiya\Console\Command
 */

namespace Shenlink\Holiya\Console\Command;

/**
 * 测试命令类
 *
 * 用于运行 PHPUnit 单元测试
 */
class TestCommand implements ICommand
{
    /**
     * 获取命令名称
     *
     * @return string 命令名称
     */
    public function getName(): string
    {
        return 'test';
    }

    /**
     * 获取命令描述
     *
     * @return string 命令描述
     */
    public function getDescription(): string
    {
        return '运行单元测试';
    }

    /**
     * 执行命令
     *
     * @param array $arguments 命令参数
     * @return int 执行结果状态码
     */
    public function execute(array $arguments = []): int
    {
        $command = 'php vendor/bin/phpunit';

        // 添加额外的参数
        if (!empty($arguments)) {
            $command .= ' ' . implode(' ', $arguments);
        }

        echo "执行命令: $command\n";
        passthru($command, $exitCode);

        return $exitCode;
    }

    /**
     * 显示帮助信息
     *
     * @return void
     */
    public function showHelp(): void
    {
        echo "用法: php holiya test [选项]\n\n";
        echo "运行 PHPUnit 单元测试。\n\n";
        echo "选项:\n";
        echo "  --coverage-html <dir>  生成 HTML 格式的代码覆盖率报告\n";
        echo "  --coverage-text        在终端中显示代码覆盖率报告\n";
        echo "  --coverage-clover      生成 Clover XML 格式的代码覆盖率报告\n";
        echo "  --filter <pattern>     只运行符合指定模式的测试\n";
        echo "  --group <name>         只运行指定分组的测试\n";
        echo "  --exclude-group <name> 排除指定分组的测试\n";
        echo "\n示例:\n";
        echo "  php holiya test\n";
        echo "  php holiya test --coverage-text\n";
        echo "  php holiya test --coverage-html coverage\n";
    }
}